\begin{frame}
% Cover slide
\titlepage

\end{frame}

\begin{frame}
\frametitle{Nouvelle interface}
\emphcouleur{Les nouveautés}
\begin{itemize}
 \item Traduite en français (ou d'autres langues)
 \item Choix des tabs ou docks
 \item Changement dynamique du niveau d'utilisation et des sorties
\end{itemize}

\n
\emphcouleur{Les changements internes}
\begin{itemize}
 \item Anciennes interfaces monolithiques éclatées en plugins
 \item Possibilités de combiner les plugins graphiquement et en ligne de commande
 \item \objectif{Objectif de la formation : créer un nouveau plugin}
\end{itemize}

\end{frame}

\section{Structure globale}
\begin{frame}
\frametitle{Structure globale}

\includegraphics[width=\textwidth]{struct_app.png}\\

\end{frame}

\begin{frame}
\frametitle{Structure globale}

\emphcouleur{Une application pour pyLot}
\begin{itemize}
 \item le cœur pylot
 \item + des plugins
\end{itemize}

\n

\emphcouleur{Modules de pylot}
\begin{itemize}
 \item interfaces : assure la compatibilité et l'homogénéité entres les différents plugins
 \item core : fonctions et classes de base
 \item cli : fonctions et classes spécifiques à la ligne de commande
 \item qtgui : fonctions et classes spécifiques aux interfaces graphiques
\end{itemize}

\end{frame}

\section{Classes principales}
\begin{frame}
\frametitle{Manipulation des données}

\emphcouleur{Types de bases}
\begin{itemize}
 \item les types python incontournables : tuple, list, dict
 \item les types unicode et str
 \item la classe \class{pylot.core.Path}
\end{itemize}

\n

\emphcouleur{Manipulation des données}
\begin{itemize}
 \item \class{pylot.core.Datum} : variable améliorée
 \item \class{pylot.core.Book} : dictionnaire amélioré de Datum
 \item \class{pylot.core.Collection} : dictionnaire amélioré de Book
\end{itemize}

\n
Voir la partie \guill{References} de la documentation

\end{frame}


\begin{frame}
\frametitle{Entrées/Sorties}

\emphcouleur{Entrées/Sorties : \class{IOHandler}}
(\class{pylot.interfaces.IOHandler})

\begin{itemize}
 \item \objectif{Défini dans le handler : \class{HandlerPart.io}}
 \item écriture simple : \class{io.writeStdout(text, [style, level]))}
 \item écriture sur stdout : \class{io.writeStdout(text, [style, level]))}
 \item écriture sur stderr : \class{io.writeStderr(text, [style, level]))}
 \item lecture simple : \class{io.rawInput(question)}
 \item lecture de données : \class{io.editData(data\_obj)}
\end{itemize}

\n

\emphcouleur{Aller plus loin}
\begin{itemize}
 \item niveau de \guill{verbosité} : \class{io.verbose}
 \item écriture sur fichiers, widgets, etc : les writers (\class{pylot.interfaces.WriterInterface})
\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
 \frametitle{Stoooooooop !!!}
 \emphcouleur{Une petite pause ?}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Exécution de commandes Shell}

\emphcouleur{Exécution de commandes shell : \class{ProcessHandler}}
(\class{pylot.interfaces.ProcessHandler})
\begin{itemize}
 \item \objectif{Défini dans le handler : \class{HandlerPart.process}}
 \item exécution d'une commande simple : \class{process.runCmd}
 \item exécution d'un groupe de commande : \class{process.run}
\end{itemize}

\n

\emphcouleur{Groupes de commandes : \class{pylot.core.CommandGroup}}
\begin{itemize}
 \item créer un groupe : \class{cg = CommandGroup(group\_id, [...])}
 \item ajouter des commandes shell : \\\class{cg.addShellCmd(cmd, args, [...])}
\end{itemize}

\end{frame}


\begin{frame}
 \frametitle{Exécution de commandes Shell (suite)}
 \emphcouleur{Aller plus loin}
\begin{itemize}
 \item exécution en fond/parallèle : \class{process.wait}
 \item nettoyage des sorties : \class{process.autoclean}
 \item choix des sorties \class{process.stdout\_mode = [u'write', u'save']}
\end{itemize}

\n

\begin{itemize}
 \item récupérations des informations sur le groupe de commandes :
  \begin{itemize}
  \item temps d'exécution : \class{cg.exec\_time}
  \item listes des commandes \class{cg.shellcmds}
  \item récupérer la commande i : \class{cmd = cg.shellcmds[i]}
  \end{itemize}
\end{itemize}

\n

\begin{itemize}
 \item récupérations des informations d'une commande :
  \begin{itemize}
  \item temps d'exécution : \class{cmd.exec\_time}
  \item sortie standard : \class{cmd.stdout} (stdout\_mode=[u'save'])
  \end{itemize}

\end{itemize}
\end{frame}

\begin{frame}

\frametitle{Le Handler}
\emphcouleur{La classe \class{pylot.interfaces.HandlerInterface}}
\begin{itemize}
 \item Classe centrale d'un plugin.
 \item Classe assurant tous les traitements
  \begin{itemize}
  \item manipulation des données
  \item création des CG et exécution des commandes
  \item traductions, configs, \dots
  \end{itemize}
\end{itemize}

\n

\emphcouleur{L'internationalisation (i18n)}
\begin{itemize}
 \item passer toutes les chaînes qui doivent être traduites à la méthode \class{tr\_}
 \item écrire les chaînes en anglais et en unicode
\end{itemize}

\end{frame}

\section{Outils pour le développement}
\begin{frame}

\frametitle{Outils pour le développement}
\emphcouleur{Les doctests}
\begin{itemize}
\item écrire les doctests dans des fichiers .rst dans les dossiers docs\_and\_tests
\item vérifier avec le plugin \plugin{plugin\_editor}
\end{itemize}

\emphcouleur{L'i18n et la documentation}
\begin{itemize}
\item utiliser le plugin \plugin{plugin\_editor} pour l'i18n et la doc
\item requis : pybabel, linguist, gettext, sphinx
\end{itemize}

\emphcouleur{L'écriture du code}
\begin{itemize}
 \item aides et conventions disponibles dans la doc
 \item configurations pré-définies pour eclipse dans le dépot SVN
 \item analyser de code disponible avec le plugin \plugin{tools\_testing}
 \item requis pylint
 \item logiciels conseillés : eclipse, ipython
\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
 \frametitle{Stoooooooop !!!}
 \emphcouleur{Suite à 14h}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
